﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProjetoBo.cs;
using ProjetoBe.cs;
using ProjetoUtil;


namespace ProjetoForm
{
    public partial class CadastroFuncionario : UserControl
    {
        FlowLayoutPanel Conteudo { get; set; }
        public CadastroFuncionario(FlowLayoutPanel conteudo)
        {
            InitializeComponent();
            Conteudo = conteudo;
        }

        private FuncionarioBo funcionarioBo = new FuncionarioBo();
        private TelefoneFuncionarioBe novoFuncionario = new TelefoneFuncionarioBe();
        Util util = new Util();

        public bool validaDados()
        {
            bool verificado = false;

            if (txt_nome.Text != string.Empty)
                novoFuncionario.funcionario.nome = txt_nome.Text;
            else
                verificado = true;

            if (util.stringSemCaracter(txt_nascimento.Text) != string.Empty)
                novoFuncionario.funcionario.nascimento = Convert.ToDateTime(txt_nascimento.Text);
            else
                verificado = true;

            if (txt_cpf.Text != "   -   -   -")
                novoFuncionario.funcionario.cpf = txt_cpf.Text;
            else
                verificado = true;

            if (txt_telefone_fixo.Text != "(  )     -")
                novoFuncionario.telefone = txt_telefone_fixo.Text;
            else
                verificado = true;

            if (txt_cargo.Text != string.Empty)
                novoFuncionario.funcionario.cargo = txt_cargo.Text;
            else
                verificado = true;

            if (box_tipo.Text != string.Empty)
                novoFuncionario.funcionario.login.tipo = box_tipo.SelectedItem.ToString();
            else
                verificado = true;

            if (txt_usuario.Text != string.Empty)
                novoFuncionario.funcionario.login.usuario = txt_usuario.Text;
            else
                verificado = true;

            if (txt_senha.Text != string.Empty)
                novoFuncionario.funcionario.login.senha = txt_senha.Text;
            else
                verificado = true;

            if (txt_admissao.Text != string.Empty)
                novoFuncionario.funcionario.admissao = Convert.ToDateTime(txt_admissao.Text);
            else
                verificado = true;

            if (!chk_data_saida.Checked)
                novoFuncionario.funcionario.saida = null;
            else
                novoFuncionario.funcionario.saida = Convert.ToDateTime(txt_saida.Text);


            return verificado;
        }

        internal void btn_salvar_Click(object sender, EventArgs e)
        {
            if (validaDados())
                MessageBox.Show("ATENÇÃO! \n\n Verifique os campos em branco");
            else
            {
                bool verificador;

                if (verificador = PodeAdicionarFuncionario(txt_usuario.Text))
                {
                    novoFuncionario.funcionario = funcionarioBo.InserirFuncionario(novoFuncionario);

                    novoFuncionario.telefone = txt_telefone_fixo.Text;
                    novoFuncionario.tipo = "fixo";
                    funcionarioBo.InserirTelefone(novoFuncionario);

                    novoFuncionario.telefone = txt_telefone_celular.Text;
                    novoFuncionario.tipo = "celular";
                    funcionarioBo.InserirTelefone(novoFuncionario);

                    registrarOutro();
                }
                else
                    MessageBox.Show("ATENÇÃO! \n\n Usuário não disponível");
            }
        }

        public bool PodeAdicionarFuncionario(String nomeUsuario)
        {
            bool retorno = false;

            if (String.IsNullOrEmpty(txt_usuario.Text) || String.IsNullOrEmpty(txt_senha.Text))
                naoOk.Visible = true;
            else
            {
                if (funcionarioBo.VerificaLogin(txt_usuario.Text))
                {
                    ok.Visible = true;
                    naoOk.Visible = false;
                    retorno = true;
                }
                else
                {
                    ok.Visible = false;
                    naoOk.Visible = true;
                    retorno = false;
                }
            }
            return retorno;
        }

        public void registrarOutro()
        {
            string caption = "Cadastro de Funcionário";
            var result = MessageBox.Show("Cadastro realizado com sucesso ! \n\nDeseja cadastrar outro funcionário ? ", caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
                limparTela();
            else
            {
                this.Visible = false;
                limparTela();
                txt_nomeBuscar.Text = string.Empty;
                if (Forms.controleMenuHomeAdmin == null)
                {
                    Forms.controleMenuHomeAdmin = new menuHomeAdmin(Conteudo);
                    Conteudo.Controls.Add(Forms.controleMenuHomeAdmin);
                }
                Forms.controleMenuHomeAdmin.Visible = true;
                this.Refresh();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            limparTela();
            btn_atualiazr.Visible = false;
            btn_salvar.Visible = true;
            btn_disponivel.Visible = true;
            btn_disponivel_atualiza.Visible = false;
        }

        public void limparTela()
        {
            txt_nome.Text = string.Empty;
            txt_cargo.Text = string.Empty;
            txt_cpf.Text = string.Empty;
            txt_telefone_fixo.Text = string.Empty;
            txt_nascimento.Text = string.Empty;
            txt_usuario.Text = string.Empty;
            txt_senha.Text = string.Empty;
            txt_telefone_celular.Text = string.Empty;
            txt_admissao.Text = string.Empty;
            txt_saida.Text = string.Empty;
            chk_data_saida.Checked = false;
            box_tipo.Text = string.Empty;
            ok.Visible = false;
            ok.Visible = false;
            naoOk.Visible = false;
        }

        private void btn_disponivel_Click(object sender, EventArgs e)
        {
            PodeAdicionarFuncionario(txt_usuario.Text);
        }

        private void chk_data_saida_CheckedChanged(object sender, EventArgs e)
        {
            if (chk_data_saida.Checked)
                txt_saida.Enabled = true;
            else
                txt_saida.Enabled = false;
        }

        private void btn_voltar_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            if (Forms.controleMenuHomeAdmin == null)
            {
                Forms.controleMenuHomeAdmin = new menuHomeAdmin(Conteudo);
                Conteudo.Controls.Add(Forms.controleMenuHomeAdmin);
            }
            Forms.controleMenuHomeAdmin.Visible = true;
            this.Refresh();
        }

        private void btn_buscarFuncionario_Click(object sender, EventArgs e) 
        {
            limparTela();

            List<string> nomefuncionario = new List<string>();
            nomefuncionario = funcionarioBo.BuscarNome(txt_nomeBuscar.Text);

            if (nomefuncionario.Count == 0)
            {
                //pede para cadastrar o novo funcionario
                lbl_cadastroFuncionario.Visible = true;
                txt_nome.Text = txt_nomeBuscar.Text;
                btn_atualiazr.Visible = false;
                btn_salvar.Visible = true;
                btn_disponivel.Visible = true;
                btn_disponivel_atualiza.Visible = false;
            }
            if (nomefuncionario.Count == 1)
            {
                //chamar metodo de procurar o nome
                PreencherformularioFuncionario(txt_nomeBuscar.Text);
                PreencherTelefoneFuncionario(txt_nomeBuscar.Text);
                btn_atualiazr.Visible = true;
                btn_salvar.Visible = false;
                btn_disponivel.Visible = false;
                btn_disponivel_atualiza.Visible = true;
            }
            if (nomefuncionario.Count >= 2)
            {
                //preenche o combobox com lista de nome e depois de selecionar faz a busca
                lbl_cadastroFuncionario.Visible = false;
                box_nomefuncionario.Visible = true;
                box_nomefuncionario.Items.Clear();
                box_nomefuncionario.Text = "Selecione aqui";

                foreach (string i in nomefuncionario)
                    box_nomefuncionario.Items.Add(i);
            }
        }

        public void PreencherTelefoneFuncionario(string nome)
        {

            txt_telefone_fixo.Text = funcionarioBo.BuscarTelefone("Fixo", nome);
            txt_telefone_celular.Text = funcionarioBo.BuscarTelefone("Celular", nome);
        }

        public void PreencherformularioFuncionario(string nome)
        {
            TelefoneFuncionarioBe dadosTelefone = new TelefoneFuncionarioBe();

            dadosTelefone = funcionarioBo.BuscarFuncionario(nome);

            txt_nome.Text = dadosTelefone.funcionario.nome;
            txt_nascimento.Text = dadosTelefone.funcionario.nascimento.ToString();
            txt_cpf.Text = dadosTelefone.funcionario.cpf;
            txt_admissao.Text = dadosTelefone.funcionario.admissao.ToString();

            if (dadosTelefone.funcionario.saida.ToString() != "")
            {
                txt_saida.Text = dadosTelefone.funcionario.saida.ToString();
                chk_data_saida.Checked = true;
            }

            txt_cargo.Text = dadosTelefone.funcionario.cargo;
          
            txt_informacao.Text =  dadosTelefone.funcionario.id.ToString();

            txt_usuario.Text = dadosTelefone.funcionario.login.usuario;
            txt_senha.Text = dadosTelefone.funcionario.login.senha;

            if (dadosTelefone.funcionario.login.tipo == "Funcionário")
                box_tipo.SelectedIndex = comboBox1.Items.IndexOf("Funcionário");
            else
                box_tipo.SelectedIndex = comboBox1.Items.IndexOf("Administrador");
        }

        private void box_nomefuncionario_SelectedValueChanged_1(object sender, EventArgs e)
        {
            box_nomefuncionario.Visible = false;
            btn_atualiazr.Visible = true;
            btn_salvar.Visible = false;
            btn_disponivel.Visible = false;
            btn_disponivel_atualiza.Visible = true;
            PreencherTelefoneFuncionario(box_nomefuncionario.SelectedItem.ToString());
            PreencherformularioFuncionario(box_nomefuncionario.SelectedItem.ToString());

        }

        private void btn_atualiazr_Click(object sender, EventArgs e)
        {
            TelefoneFuncionarioBe novoFuncionario = new TelefoneFuncionarioBe();
            bool verificado = false;

            if (txt_nome.Text == string.Empty)
                verificado = true;

            if (txt_nascimento.ToString() == string.Empty)
                verificado = true;

            if (txt_cpf.Text == "   -   -   -")
                verificado = true;

            if (txt_telefone_fixo.Text == "(  )     -")
                verificado = true;

            if (txt_cargo.Text == string.Empty)
                verificado = true;

            if (box_tipo.Text == string.Empty)
                verificado = true;

            if (txt_usuario.Text == string.Empty)
                verificado = true;

            if (txt_senha.Text == string.Empty)
                verificado = true;


            if (verificado)
                MessageBox.Show("ATENÇÃO! \n\n Verifique os campos em branco");
            else
            {
                novoFuncionario.funcionario.nome = txt_nome.Text;
                novoFuncionario.funcionario.admissao = Convert.ToDateTime(txt_admissao.Text);
                novoFuncionario.funcionario.cargo = txt_cargo.Text;
                novoFuncionario.funcionario.nascimento = Convert.ToDateTime(txt_nascimento.Text);

                if (!chk_data_saida.Checked)
                    novoFuncionario.funcionario.saida = null;
                else
                    novoFuncionario.funcionario.saida = Convert.ToDateTime(txt_saida.Text);

                novoFuncionario.funcionario.cpf = txt_cpf.Text;
                novoFuncionario.funcionario.login.usuario = txt_usuario.Text;
                novoFuncionario.funcionario.login.senha = txt_senha.Text;
                novoFuncionario.funcionario.login.tipo = box_tipo.SelectedItem.ToString();
                novoFuncionario.telefone = txt_telefone_fixo.Text;
                novoFuncionario.funcionario.id = Convert.ToInt32(txt_informacao.Text);

                bool verificador;

                if (verificador = funcionarioBo.VerificaLoginDuplicado(novoFuncionario)) // se retornar verdadeiro é por que é o mesmo login
                {

                    novoFuncionario.telefone = txt_telefone_fixo.Text;
                    novoFuncionario.tipo = "fixo";
                    funcionarioBo.AtualizarTelefone(novoFuncionario);

                    novoFuncionario.telefone = txt_telefone_celular.Text;
                    novoFuncionario.tipo = "celular";
                    funcionarioBo.AtualizarTelefone(novoFuncionario);

                    string msg = funcionarioBo.AlterarDadosFuncionario(novoFuncionario);
                    MessageBox.Show(msg);
                }
                else
                {
                    if (verificador = PodeAdicionarFuncionario(txt_usuario.Text))
                    {
                        novoFuncionario.telefone = txt_telefone_fixo.Text;
                        funcionarioBo.AtualizarTelefone(novoFuncionario);

                        novoFuncionario.telefone = txt_telefone_celular.Text;
                        funcionarioBo.AtualizarTelefone(novoFuncionario);

                        string msg = funcionarioBo.AlterarDadosFuncionario(novoFuncionario);
                        MessageBox.Show(msg);
                    }
                    else
                        MessageBox.Show("ATENÇÃO! \n\n Usuário não disponível");
                }
            }

            this.Visible = false;
            if (Forms.controleMenuHomeAdmin == null)
            {
                Forms.controleMenuHomeAdmin = new menuHomeAdmin(Conteudo);
                Conteudo.Controls.Add(Forms.controleMenuHomeAdmin);
            }
            Forms.controleMenuHomeAdmin.Visible = true;
            this.Refresh();

        }

        private void btn_disponivel_atualiza_Click(object sender, EventArgs e)
        {
            TelefoneFuncionarioBe objeto = new TelefoneFuncionarioBe();
            objeto.funcionario.login.usuario = txt_usuario.Text;
            objeto.funcionario.id = Convert.ToInt32(txt_informacao.Text);

            bool verificador;

            if (verificador = funcionarioBo.VerificaLoginDuplicado(objeto))
            {
                ok.Visible = true;
                naoOk.Visible = false;
            }
            else
            {
                PodeAdicionarFuncionario(txt_usuario.Text);
            }
        }
    }
}
